1. Field of the Invention
The invention relates to embedding specialized elements, for example statistical analysis or machine learning techniques, into application programs in a relatively non-disruptive and efficient manner.
2. Related Art
It is often problematic to attempt to embed expert knowledge about a specialized domain into an application program. In the known art, either                The expert knowledge is supplied in a very general form, such as for example a library of callable functions. While this allows developers of many different application programs to use a generic library, this technique involves a substantial amount of information by developers about the expert knowledge and how to apply it.        The expert knowledge is supplied in a very specific form, such as for example custom program or system written for use by the application program. While this allows the developer of the application program to use that expert knowledge, this technique involves a substantial amount of information by the creator of the custom program or system about how the expert knowledge will be applied to the application program.        
Neither of these techniques is fully satisfactory, as either they involve having the developer of the application program learn a substantial amount of information they might not have time to fully learn and understand, or they involve having the developer of the custom program or system learn a substantial amount of information about the application program. Both of these problems have the drawback that they increase the expense, in terms of effort, money, time, and trust between developers.
Accordingly, it would be desirable to provide techniques by which application developers can make easy use of specialized elements provided by expert knowledge providers, with a minimum of cross-domain knowledge required, while still maintaining broad applicability of the specialized elements, thus avoiding drawbacks of the known art.
Many different computer program applications could benefit from embedding specialized program elements that enable use of specialized knowledge, including statistical analysis, data mining, machine learning, OLAP (online analytical processing), and the like. Conventional integration of such specialized elements into application programs generally takes one of two forms.
First, the specialized elements could be applied at development time or “offline.” This approach is limited in that the specialized elements cannot learn from or otherwise adapt at runtime.
Second, the specialized elements could be applied at runtime or “online.” One major benefit of this approach is that the elements can adapt and personalize to an individual user.
Current approaches to providing specialized elements (for example, embedded packages such as those for statistical analysis) at runtime generally fall into two categories. (a) Supply very widely applicable specialized elements, but require the client (that is, a developer writing the code for use by an end user) to identify all relevant features and cast them into a pre-defined format at runtime. (b) Supply very narrowly applicable specialized elements that have all features pre-defined, but that are only applicable to a specific application. Each of these approaches has various drawbacks.
If the specialized elements are widely applicable, the client generally must learn and utilize extensive expertise in order to tie the elements into the application. This process can be problematic, especially if the client does not understand which features are important for proper function of the specialized elements. Furthermore, even if the client does understand which features need to be provided, the client might not know or understand details of exactly how those features should be provided, or how those features should be provided for optimum effect.
The supplier of the specialized elements can assist the client with these matters. However, the supplier might need access to the client's application source code in order to provide useful assistance. This can be unacceptable if the client wants or needs to keep its application source code secret, such as for example to protect trade secrets and other intellectual property embodied in the source code.
Finally, any changes to application program code can necessitate changes to how the specialized elements are tied into the application. As a result, the client might need assistance from the supplier throughout the entire coding process. Such assistance can be very time consuming, and therefore expensive, especially if it must be provided to the very end (sometimes called the “last mile”) of the coding process.
For at least these reasons, conventional widely applicably specialized elements can be overly expensive for the developer, especially in domains requiring specialized statistical analysis.
With very narrowly applicable specialized elements, the process of tying the elements to a particular application can be simpler. However, such specialized elements will only be useful with the particular application for which they are specifically designed. Every time similar elements are needed for another application, they will have to be re-written or the old elements will have to be extensively modified, even if their general operation and use is the same as previous implementations. This is not an efficient development process.
The foregoing issues particularly arise in, but are not limited to, the contexts of machine learning, statistical analysis, and OLAP (online analytical processing).
For example, game and simulation developers are often experts at creating graphics, environments, player and non-player characters, simple artificial intelligences, and the like. However, they often have only limited experience in the application of more complex machine learning to software agents that control the game's or simulation's characters.
Likewise, developers of financial application software are often experts at calculations involving financial transactions, graphics and conventions for depicting those transactions, and the like. However, they often have only limited experience in the application of machine learning to analysis of financial trends and likely actions of actors in a market place.
In both of these examples, the developers might turn to outside suppliers for specialized elements than enable such machine learning. When the developers attempt to incorporate those elements into their applications, they will encounter the issues discussed above.